package com.ypf.demo_ssm.config;

import com.ypf.demo_ssm.utils.ApiResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 统一异常处理
 */
@ControllerAdvice(basePackages = {"com.ypf.demo_ssm"})
@ResponseBody // Spring框架中的一个注解，主要用于将控制器方法的返回值直接写入HTTP响应体中，而不是渲染成一个视图。这个注解简化了向客户端返回JSON、XML或其他自定义格式数据的过程，非常适合构建RESTful API或进行 AJAX 请求处理
@Slf4j
public class MyExceptionAdvice {

    // 专门用来处理NullPointerException（空指针异常）
    @ExceptionHandler(NullPointerException.class)
    public ApiResponse<Object> doNullPointerException(NullPointerException e) {
        log.error("空指针异常信息：" + e.getMessage());
        return new ApiResponse<>(500, e.getMessage(), null);
    }

    // 默认的异常处理，当有有异常出现的时候，会先匹配子类的异常，当所有的异常都没有匹配的时候就会走这一条默认的一场路线业务
    @ExceptionHandler(Exception.class)
    public ApiResponse<Object> doException(Exception e) {
        log.error("其他异常信息：" + e.getMessage());
        return new ApiResponse<>(500, e.getMessage(), null);
    }

    // 业务异常处理
    @ExceptionHandler(ServiceException.class)
    public ApiResponse<Object> doException(RuntimeException e) {
        log.error("业务异常信息：" + e.getMessage());
        return new ApiResponse<>(500, e.getMessage(), null);
    }



}
